package com.jhgsys.internal.system.service;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jhgsys.internal.common.entity.MenuTree;
import com.jhgsys.internal.common.entity.MenuTreeNew;
import com.jhgsys.internal.common.entity.QueryRequest;
import com.jhgsys.internal.system.dto.MenuDto;
import com.jhgsys.internal.system.entity.Menu;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author MrBird
 */
public interface IMenuService extends IService<Menu> {

    /**
     * 查找用户权限集
     *
     * @param username 用户名
     * @return 用户权限集合
     */
    List<Menu> findUserPermissions(String username);

    /**
     * 查找用户菜单集合
     * @param username 用户名
     * @return 用户菜单集合
     */
    MenuTree<Menu> findUserMenus(String username);

    /**
     * 查找所有的菜单/按钮 （树形结构）
     *
     * @return MenuTree<Menu>
     */
    MenuTree<Menu> findMenus(Menu menu);

    /**
     * 查询第一级菜单count，parentId=0
     * @return
     */
    Integer findMenusCount(Menu menu);

    /**
     * 查询列表treeTable数据
     * @param request
     * @param menu
     * @return
     */
    MenuTreeNew<Menu> findMenusA(QueryRequest request,Menu menu);

    /**
     * 搜索返回数据，talbe形式
     * @param request
     * @param menu
     * @return
     */
    List<MenuTreeNew<Menu>> searchMenus(QueryRequest request,Menu menu);

    /**
     * 搜索返回数据count
     * @param menu
     * @return
     */
    Integer serchMenusCount(Menu menu);

    /**
     * 新增编辑页面，菜单下拉treeSelect
     * @param menu
     * @return
     */
    Object findMenusB(Menu menu);

    /**
     * 查找所有菜单/按钮 jsonArray形式
     * @param menu
     * @return
     */
    List<Menu> findMenusNew(Menu menu);

    /**
     * 查找所有的菜单/按钮
     *
     * @return MenuTree<Menu>
     */
    List<Menu> findMenuList(Menu menu);

    /**
     * 根据id查找menu
     * @param menuId
     * @return
     */
    MenuDto findMenuById(String menuId);

    /**
     * 新增菜单（按钮）
     *
     * @param menu 菜单（按钮）对象
     */
    void createMenu(Menu menu);

    /**
     * 修改菜单（按钮）
     *
     * @param menu 菜单（按钮）对象
     */
    void updateMenu(Menu menu);

    /**
     * 删除菜单（按钮）
     *
     * @param menuIds 菜单（按钮）id
     */
    //void deleteMeuns(String menuIds);

    /**
     * 查询role下的菜单
     *
     * @param roleId
     * @return
     */
    List<Menu> findRoleMenus(String roleId);

    /**
     * 查询tenant下的菜单
     *
     * @param tenantId
     * @return
     */
    List<Menu> findTenantMenus(String tenantId);

    /**
     * 批量删除菜单，即更新删除标记、删除时间和删除人
     */
    void updateMenuDeletedFlg(String menuIds, Menu menu);


    /**
     * 菜单excel导出
     *
     * @param menu
     * @param response
     * @author qiny
     * @date 2019-07-24
     */
    void exportData(Menu menu, HttpServletResponse response);


    /**
     * 查找所有的菜单/按钮 （树形结构）
     *
     * @return MenuTree<Menu>
     */
    MenuTree<Menu> findChildTenantMenuTree();
}
